
package ModelLayer;

import java.util.ArrayList;

/**
 * @author (GP3 Product Solutions) 
 * @version (08-06-2011 THSS: Oprettelse af klassen)
 */
public class Ordre {
    // instans variabler
    private ArrayList<DelOrdre> delOrdreListe;
    private Person kunde;
    private int ordreId;
    private String dato;
    private Boolean statusTilbud;
    private Boolean statusBetalt;
    private double total;
    private Long ean;

    /**
     * * Konstruktør for objekter af klassen Ordre
     */
     public Ordre(int ordreID, String Dato)
     {
         delOrdreListe = new ArrayList<DelOrdre>();  
     }   
    
     /**
      * Metode der tilføjer en del ordre til en ordre
      * @param vare objekt af typen VareBeskrivelse
      * @param antal antal af vare
      */
     public void tilfoejDelOrdre(VareBeskrivelse vare, int antal)
     {
         int DOI = genererDelOrdreId();
         DelOrdre DO = new DelOrdre(DOI, vare, antal);
         delOrdreListe.add(DO);
     }
     
     /**
      * Metode der generere et id til en delordre
      * @return int del ordre ID
      */
     public int genererDelOrdreId()
     {
         int delOrdreId = delOrdreListe.size();
         return delOrdreId;
     }
     
     /**
      * Metode til at finde en del ordre
      * @param delOrdreId int delordrens id
      * @return DelOrdre returnere et objekt af typen DelOrdre
      */
     public DelOrdre findDelOrdre(int delOrdreId)
     {
        boolean found = false;
        int index = 0;
        DelOrdre DO = null;
        while (index < delOrdreListe.size() && !found)
        {
            if (delOrdreListe.get(index).hentDelOrdreId() == delOrdreId)
            {
                found = true;
                DO = delOrdreListe.get(index);
            }
            index++;
        }
        if(!found)
        {
            found = false;
        }
        
        return DO;
     }
     
     /**
      * Metode der sletter en delordre ud fra delordrens id
      * @param delOrdreId int del ordrens id
      */
     public void sletDelOrdre(int delOrdreId)
     {
         DelOrdre DO = findDelOrdre(delOrdreId);
         delOrdreListe.remove(DO);       
     }
          
     /**
      * get metode der henter en ordres ID
      * @return int ordre ID
      */
     public int hentOrdreId()
     {
          return ordreId;
     }
     
     /**
      * set metode der angiver datoen
      * @param dato String dato
      */
     public void angivDato (String dato)
     {
         this.dato = dato;
     }
     
     /**
      * get metode der henter datoen
      * @return String dato
      */
     public String hentDato()
     {
         return dato;
     }
     
     /**
      * Metode der angiver om ordren er et tilbud
      */
     public void angivStatusTilbud()
     {
         //Denne metode er ikke implementeret
     }
     
     /**
      * Metode der henter om ordren er et tilbud
      * @return Boolean status på tilbud
      */
     public Boolean hentStatusTilbud()
     {
         // Denne metode er ikke implementeret
         return statusTilbud;
     }
     
     /**
      * Metode der angiver om en ordre er betalt
      */
     public void angivStatusBetalt()
     {
         //Denne metode er ikke implementeret
     }
     
     /**
      * Metode der henter om en ordre er betalt
      * @return Boolean betalingsstatus
      */
     public Boolean hentStatusBetalt()
     {
         //Denne metode er ikke implementeret
         return statusBetalt;
     }
     
     /**
      * Metode der udregner det totale beløb for en ordre
      * @return double total beløb for en ordre
      */
     
     public double udregnTotal()
     {
         total = 0;
         int index = 0;
         while(index < delOrdreListe.size())
        {
            DelOrdre DOTotal = delOrdreListe.get(index);
            total = total + DOTotal.udregnTotal();
            index++;
        }
        return total;
     }
     
     /**
      * Metode der tilføjer en kunde til en ordre
      * @param kunde et objekt af typen Kunde
      */
     public void tilfoejKunde(Person kunde)
     {
         this.kunde = kunde;
     }
     
     /**
      * metode der tilføjer en medarbejder til en ordre  
      */
     public void tilfoejMedarbejder()
     {
         //Metoden er ikke implementeret
     }   
     
     /**
      * Metode der returnere ordreId og dato for en ordre i en STring
      * @return String ordreId og dato
      */
    @Override
     public String toString()
     {
         String info = "Ordre ID "+ hentOrdreId() + "Dato " + hentDato();
         return info;
     }
     
    /**
     * Metode der tilføjer et ean nummer til en ordre
     * @param ean Long ean nummer
     */
     public void tilfoejEAN(Long ean)
     {
         this.ean = ean;
     }
     
     /**
      * Metode der henter en ordres ean nummer
      * @return Long ean nummer
      */
     public Long hentEAN()
     {
         return ean;
     }
     
     /**
      * Metode der returnere den kunde der kan være tilknyttet en ordre
      * @return kunde et objekt af typen Kunde
      */
     public Person hentKunde()
     {
         return kunde;
     }
     
     /**
      * Metode der returnere en ordres del ordre liste
      * @return ArrayList en ArrayList af DelOrdre
      */
     public ArrayList<DelOrdre> hentDelOrdreListe()
     {
         return delOrdreListe;
     }   
}